package main

// A 依赖 B
type A struct {
	B *B
}

func NewA() *A {
	return &A{}
}

// B 依赖 A
type B struct {
	A *A
}

func NewB() *B {
	return &B{}
}

// 工厂函数设置依赖
func SetupDependencies(a *A, b *B) {
	a.B = b
	b.A = a
}

// 定义一个结构体来包含 A 和 B 的实例
type App struct {
	A *A
	B *B
}

// 创建 App 实例并设置依赖
func NewApp() *App {
	a := NewA()
	b := NewB()
	SetupDependencies(a, b)
	return &App{
		A: a,
		B: b,
	}
}

func main() {
	app := NewApp()
	SetupDependencies(app.A, app.B)
	// 使用 app.A 和 app.B
}
